package lesson11;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * 斗地主发牌器
 */
public class DouDiZhu {
    private ArrayList<Puke> pukes = new ArrayList<>();

    /**
     * 初始化54张扑克牌
     */
    public void init(){
        String [] points = "3,4,5,6,7,8,9,10,J,Q,K,A,2".split(",");
        String [] types = "♠,♥,♣,♦".split(",");
        for(int i = 0;i < points.length;i++){
            for (int j = 0;j < types.length;j++){
                pukes.add(new Puke(points[i],types[j],i,j));
            }
        }
        pukes.add(new Puke("大王","",14,0));
        pukes.add(new Puke("小王","",13,0));

    }

    /**
     * 洗牌
     */
    public void shuffle(){
        Collections.shuffle(pukes);
        System.out.println(pukes);
    }

    /**
     * 发牌
     */
    public void sendCard(){
        List playerOne = pukes.subList(0,17);
        List playerTwo = pukes.subList(17,34);
        List playerThree = pukes.subList(34,51);
        List base = pukes.subList(51,54);

        sort(playerOne);
        sort(playerTwo);
        sort(playerThree);

        System.out.println("玩家一：" + playerOne);
        System.out.println("玩家二：" + playerTwo);
        System.out.println("玩家三：" + playerThree);
        System.out.println("玩家四：" + base);
    }

    private void sort(List list){
        Collections.sort(list, new Comparator<Puke>() {
            @Override
            public int compare(Puke o1, Puke o2) {
                if(o1.getPointValue() == o2.getPointValue()){
                    return o1.getTypeValue() - o2.getTypeValue();
                }else{
                    return o2.getPointValue() - o1.getPointValue();
                }
            }
        });
    }

    public static void main(String[] args) {
        DouDiZhu douDiZhu = new DouDiZhu();
        douDiZhu.init();
        douDiZhu.shuffle();
        douDiZhu.sendCard();
    }
}
